﻿using System;
using System.Data.OleDb;
using System.Collections;
using System.Data.SqlClient;

namespace Persistencia
{
    public class ConexionBD
    {
        private static ConexionBD instancia;
        private OleDbConnection conexionReal;
        private OleDbDataReader dr;

        #region constructor

        private ConexionBD(String sentence)
        {
            this.conexionReal = new OleDbConnection(sentence);
        }

        static public ConexionBD getInstance(String sentence)
        {
            if (instancia == null)
            {
                instancia = new ConexionBD(sentence);
            }
            return instancia;
        }

        static public ConexionBD getInstance()
        {
            if (instancia == null)
            {
                instancia = new ConexionBD("");
            }
            return instancia;
        }

        #endregion

        #region metodos

        //coneccion a la base
        public void connect()
        {
            this.conexionReal.Close();
            this.conexionReal.Open();
        }

        //desconexion de la base
        public void disconnect()
        {
            this.conexionReal.Close();
        }

        //ejecutar una sentencia en la base
        public void execute(string sentence)
        {
            OleDbCommand cmd = new OleDbCommand(sentence, this.conexionReal);
            cmd.ExecuteNonQuery();
        }

        //obtener datos de un registro en la base
        public void bringData(string sentence)
        {
            OleDbCommand cmd = new OleDbCommand(sentence, this.conexionReal);
            this.dr = cmd.ExecuteReader();
        }

        //obtener todos los registros de una tabla
        public void bringList(string sentence)
        {
            OleDbCommand cmd = new OleDbCommand(sentence, this.conexionReal);
            this.dr = cmd.ExecuteReader();
        }

        //leer el siguiente registro de un dataReader
        public bool nextRecord()
        {
            bool thereIsRecord = false;
            if (this.dr.Read())
            {
                thereIsRecord = true;
            }
            return thereIsRecord;
        }

        //obtener un campo de un registro de la base pasandole el nombre del campo
        public object getDataString(string sentence)
        {
            return dr[sentence];
        }

        //obtener un campo de un registro de la base pasandole la posicion del campo
        public object getDataIndex(int index)
        {
            return dr[index];
        }

        //obtener el string de coneccion
        public string connectionText()
        {
            return this.conexionReal.ToString();
        }

        public OleDbConnection RealConnection
        {
            get { return conexionReal; }
        }

        #endregion
    }
}
